package com.longcai.controller.scm;


import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.longcai.bean.ApiResult;
import com.longcai.entity.homepage.GoodsClass;
import com.longcai.entity.scm.ClyjScmGoods;
import com.longcai.entity.scm.ClyjScmGoodsSpec;
import com.longcai.entity.scm.ClyjScmGoodsSpecZdy;
import com.longcai.entity.scm.ClyjScmGoodsZdy;
import com.longcai.service.scm.ClyjScmGoodsService;
import com.longcai.service.scm.ClyjScmGoodsSpecService;
import com.longcai.service.scm.ClyjScmGoodsSpecZdyService;
import com.longcai.service.scm.ClyjScmGoodsZdyService;
import com.longcai.util.Map2class;
import com.longcai.util.OSSUtils;
import com.longcai.util.UUIDUtil;
import com.longcai.util.UserUtil;

import java.io.InputStream;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

/**
 * <p>
 * 首页商品表 前端控制器
 * </p>
 *
 * @author LWK
 * @since 2019-04-28
 */
@Controller
@RequestMapping("/clyjScmGoodsZdy")
public class ClyjScmGoodsZdyController {
	@Resource
    private ClyjScmGoodsService clyjGoodsService;
	@Resource
    private ClyjScmGoodsZdyService clyjGoodsZdyService;
	@Resource
	private ClyjScmGoodsSpecService specService;
	@Resource
	private ClyjScmGoodsSpecZdyService specZdyService;
	
	/**
     * 从供应链商城导入自定义商城
     *
     * @param params
     * @return
     */
    @RequestMapping("/importFromScm")
    @ResponseBody
	public ApiResult importFromScm(@RequestBody JSONObject params) {
		try{
	        String goods_scm_id = params.getString("id");		//供应链商品id
	        //根据商品id和商户id，查询当前商品是否已经导入
	        QueryWrapper<ClyjScmGoodsZdy> queryWrapper = new QueryWrapper<ClyjScmGoodsZdy>();
//	        String userId = UserUtil.getLoginUser().getUserId();
	        String userId="clyj_uAcuMY55";
	        queryWrapper.eq("sh_id", userId);
	        queryWrapper.eq("goods_scm_id", goods_scm_id);
	        ClyjScmGoodsZdy selectOne = clyjGoodsZdyService.selectOne(queryWrapper);
	        if(selectOne!=null)
	        	return ApiResult.fail("当前商品已经导入");
	        //根据供应链商品id，查询商品信息
	        
	        ClyjScmGoods scmGoods = clyjGoodsService.selectById(goods_scm_id);
	        if(scmGoods==null)
	        	return ApiResult.fail("当前商品不存在");
	        //实体类转换
	        Map<String, Object> obj2Map = Map2class.obj2Map(scmGoods);
	        ClyjScmGoodsZdy scmZdyGoods = (ClyjScmGoodsZdy) Map2class.map2Obj(obj2Map, ClyjScmGoodsZdy.class);
	        String uuid= UUIDUtil.uuid();
	        scmZdyGoods.setGoodsId(uuid);
	        scmZdyGoods.setGoodsScmId(goods_scm_id);
	        scmZdyGoods.setSh_id(userId);
	        scmZdyGoods.setGoodsStatus("2");		//状态为下架，需要手动上架
	        scmZdyGoods.setMonthSales(0);			//兑换数为0
	        scmZdyGoods.setSort("00001");
	        scmZdyGoods.setCreateTime(LocalDateTime.now());
	        clyjGoodsZdyService.insert(scmZdyGoods);
	        //导入规格
	        QueryWrapper<ClyjScmGoodsSpec> queryWrapper2 = new QueryWrapper<ClyjScmGoodsSpec>();
	    	queryWrapper2.eq("goods_id", goods_scm_id);
	    	queryWrapper2.orderByAsc("spec_sort");
	    	List<ClyjScmGoodsSpec> selectList = specService.selectList(queryWrapper2);
	    	if(selectList==null || selectList.size()==0)
	    		return ApiResult.success();
	    	for (ClyjScmGoodsSpec clyjScmGoodsSpec : selectList) {
	    		 ClyjScmGoodsSpecZdy specZdy = new ClyjScmGoodsSpecZdy();
	    		 specZdy.setGoodsId(uuid);
	    		 specZdy.setSpecId(UUIDUtil.uuid());
	    		 specZdy.setSpecDetail(clyjScmGoodsSpec.getSpecDetail());
	    		 specZdy.setSpecNum(clyjScmGoodsSpec.getSpecNum());
	    		 specZdy.setSpecPriceNew(new BigDecimal(0.00));
	    		 specZdy.setSpecSort(clyjScmGoodsSpec.getSpecSort());
	    		 specZdy.setSpecScmId(clyjScmGoodsSpec.getSpecId());
	    		 specZdy.setSpecPriceOld(new BigDecimal(0.00));
	    		 specZdy.setSpecYj(new BigDecimal(0.00));
	    		 specZdyService.insert(specZdy);
			}
	    	return ApiResult.success();
    	}catch(Exception e){
    		e.printStackTrace();
    		return ApiResult.fail("导入错误："+e.getMessage());
    	}
    }
    
    /**
     * 自定义商城列表
     *
     * @param goodsName				商品名称（模糊查询）
     * @param presentPrice			商品最低价格（价格筛选）
     * @param originalPrice			商品最高价（价格筛选）3
     * @param goodsStatus			商品状态（1：已上架；2：下架）
     * @param typesId				商品类型Id
     * @return
     */
    @RequestMapping("/ScmZdyGoods")
    @ResponseBody
	public ApiResult ScmZdyGoods(ClyjScmGoodsZdy clyjScmGoods) {
    	//定义查询参数
    	QueryWrapper<ClyjScmGoodsZdy> queryWrapper = new QueryWrapper<ClyjScmGoodsZdy>();
    	try{
	    	//商品名称判断
	    	if(clyjScmGoods.getGoodsName()!=null && !clyjScmGoods.getGoodsName().equals("")){
	    		queryWrapper.like("goods_name", clyjScmGoods.getGoodsName());
	    	}
	    	//商品名称判断
	    	if(clyjScmGoods.getGoodsId()!=null && !clyjScmGoods.getGoodsId().equals("")){
	    		queryWrapper.eq("goods_id", clyjScmGoods.getGoodsId());
	    	}
	    	//商品状态判断
	    	if(clyjScmGoods.getGoodsStatus()!=null && !clyjScmGoods.getGoodsStatus().equals("")){
	    		String goodsStatus = clyjScmGoods.getGoodsStatus();
	    		queryWrapper.eq("goods_status", goodsStatus);
	    	}
	    	//商品最低价判断
	    	if(clyjScmGoods.getPresentPrice()!=null && !clyjScmGoods.getPresentPrice().equals("")){
	    		BigDecimal presentPrice = clyjScmGoods.getPresentPrice();
	    		queryWrapper.ge("present_price",presentPrice); 
	    	}
	    	//商品最高价判断
	    	if(clyjScmGoods.getOriginalPrice()!=null && !clyjScmGoods.getOriginalPrice().equals("")){
	    		BigDecimal originalPrice = clyjScmGoods.getOriginalPrice();
	    		queryWrapper.le("present_price",originalPrice);
	    	}
	    	queryWrapper.orderByAsc("sort");
	    	List<ClyjScmGoodsZdy> selectList = clyjGoodsZdyService.selectList(queryWrapper);
	    	return ApiResult.success(selectList);
    	}catch(Exception e){
    		e.printStackTrace();
    		return ApiResult.fail("列表展示错误"+e.getMessage());
    	}
    }
    
    /**
     * 自定义商城编辑
     *
     * @param goodsId				商品id（用于查询商品详情）
     * @return
     */
    @RequestMapping("/ToUpdate")
    @ResponseBody
	public ApiResult ToUpdate(ClyjScmGoodsZdy clyjScmGoods) {
    	//定义查询参数
    	QueryWrapper<ClyjScmGoodsZdy> queryWrapper = new QueryWrapper<ClyjScmGoodsZdy>();
    	try{
	    	//商品名称判断
	    	if(clyjScmGoods.getGoodsId()==null || clyjScmGoods.getGoodsId().equals(""))
	    		return ApiResult.fail("商品id不能为空");
	    	queryWrapper.eq("goods_id", clyjScmGoods.getGoodsId());
	    	ClyjScmGoodsZdy goods = clyjGoodsZdyService.selectOne(queryWrapper);
	    	//获取规格详情
	    	QueryWrapper<ClyjScmGoodsSpecZdy> queryWrapper2 = new QueryWrapper<ClyjScmGoodsSpecZdy>();
	    	queryWrapper2.eq("goods_id", goods.getGoodsId());
	    	queryWrapper2.orderByAsc("spec_sort");
	    	List<ClyjScmGoodsSpecZdy> selectList = specZdyService.selectList(queryWrapper2);
	    	goods.setSpecList(selectList);
	    	return ApiResult.success(goods);
    	}catch(Exception e){
    		e.printStackTrace();
    		return ApiResult.fail("商品详情获取错误"+e.getMessage());
    	}
    }
    
    /**
     * 自定义商城修改
     *
     * @param goodsId				商品id（用于查询商品详情）
     * @return
     */
    @RequestMapping("/updateById")
    @ResponseBody
	public ApiResult updateById(ClyjScmGoodsZdy clyjScmGoods, MultipartFile goodsPic2, MultipartFile goodsBanner2) {
    	try{
    		 if (goodsPic2 != null) {
    			 //文档上传oss
                String fileName = goodsPic2.getOriginalFilename();
                String pox = fileName.substring(fileName.lastIndexOf(".") + 1);
                InputStream inputStream = goodsPic2.getInputStream();
                Map<String, Object> uploadByInputStream = OSSUtils.uploadByInputStream(inputStream, pox, "CLYJ/GOODSZDY/PIC/");
                clyjScmGoods.setGoodsPic(uploadByInputStream.get("path").toString());
    	     }
	        if (goodsBanner2 != null) {
	            //文档上传oss
                String fileName = goodsBanner2.getOriginalFilename();
                String pox = fileName.substring(fileName.lastIndexOf(".") + 1);
                InputStream inputStream = goodsBanner2.getInputStream();
                Map<String, Object> uploadByInputStream = OSSUtils.uploadByInputStream(inputStream, pox, "CLYJ/GOODSZDY/BANNER/");
                clyjScmGoods.setGoodsBanner(uploadByInputStream.get("path").toString());
	        }
	        //修改规格的价格
	        List<String> specList = clyjScmGoods.getSpecId();
	        List<String> specPrice = clyjScmGoods.getSpecPrice();
	        if(specList!=null && specList.size()>0){
	        	for (int i=0;i< specList.size() ;i++) {
	        		ClyjScmGoodsSpecZdy clyjScmGoodsSpecZdy =new ClyjScmGoodsSpecZdy();
	        		if(specList.get(i)==null || specList.get(i).equals(""))
	        			continue;
	        		if(specPrice.get(i)==null || specPrice.get(i).equals(""))
	        			continue;
	        		clyjScmGoodsSpecZdy.setSpecId(specList.get(i));
	        		clyjScmGoodsSpecZdy.setSpecPriceNew(new BigDecimal(specPrice.get(i)));
	        		specZdyService.updateById(clyjScmGoodsSpecZdy);
				}
	        }
	        clyjGoodsZdyService.updateById(clyjScmGoods);
	    	return ApiResult.success();
    	}catch(Exception e){
    		e.printStackTrace();
    		return ApiResult.fail("商品详情获取错误"+e.getMessage());
    	}
    }
    
    /**
     * 批量下架
     *
     * @param goodsId				商品id（用于查询商品详情）
     * @return
     */
    @RequestMapping("/undercarriage")
    @ResponseBody
	public ApiResult undercarriage(ClyjScmGoodsZdy clyjScmGoods) {
    	//定义查询参数
    	try{
    		String goodsIds = clyjScmGoods.getGoodsId();
    		if(goodsIds==null || goodsIds.equals(""))
    			return ApiResult.fail("商品id不能为空");
    		String[] goods = goodsIds.split(",");
    		clyjScmGoods.setGoodsStatus("1");
    		for (String good : goods) {
    			clyjScmGoods.setGoodsId(good);
    			clyjGoodsZdyService.updateById(clyjScmGoods);
			}
	    	return ApiResult.success();
    	}catch(Exception e){
    		e.printStackTrace();
    		return ApiResult.fail("下架失败"+e.getMessage());
    	}
    }
    
    /**
     * 批量删除
     *
     * @param goodsId				商品id（用于查询商品详情）
     * @return
     */
    @RequestMapping("/delete")
    @ResponseBody
	public ApiResult delete(ClyjScmGoodsZdy clyjScmGoods) {
    	//定义查询参数
    	try{
    		String goodsIds = clyjScmGoods.getGoodsId();
    		if(goodsIds==null || goodsIds.equals(""))
    			return ApiResult.fail("商品id不能为空");
    		String[] goods = goodsIds.split(",");
    		for (String good : goods) {
    			clyjGoodsZdyService.deleteById(good);
    			//删除规格信息
        		QueryWrapper<ClyjScmGoodsSpecZdy> queryWrapper = new QueryWrapper<ClyjScmGoodsSpecZdy>();
        		queryWrapper.eq("goods_id", good);
        		specZdyService.delete(queryWrapper);
			}
	    	return ApiResult.success();
    	}catch(Exception e){
    		e.printStackTrace();
    		return ApiResult.fail("下架失败"+e.getMessage());
    	}
    }
}

